<!DOCTYPE html>
<html lang="en">

<head>
	<meta http-equiv="content-type" content="text/html; charset=utf-8">
	<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
	
	<!-- title -->
	
	<title>
	
		搭建环境-SpringBoot-Maven-Git | 
	 
	对线面试官
	</title>
	
	<!-- keywords,description -->
	 
		<meta name="description" content="Java一线大厂面试" />
	

	<!-- favicon -->
	
	<link rel="shortcut icon" href="/luffy/favicon.ico">
	


	<!-- search -->
	<script>
		var searchEngine = "https://www.baidu.com/s?wd=";
		if(typeof searchEngine == "undefined" || searchEngine == null || searchEngine == ""){
			searchEngine = "https://www.google.com/search?q=";
		}
		var homeHost = "";
		if(typeof homeHost == "undefined" || homeHost == null || homeHost == ""){
			homeHost = window.location.host;
		}
	</script>


	
<link rel="stylesheet" href="/luffy/css/main.css">

	
<link rel="stylesheet" href="https://cdn.staticfile.org/font-awesome/4.7.0/css/font-awesome.min.css">

	
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@9.17.1/build/styles/darcula.min.css">

	
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css">


	
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js"></script>

	
<script src="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js"></script>

	
<script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@9.17.1/build/highlight.min.js"></script>

	
<script src="https://cdn.jsdelivr.net/npm/jquery-pjax@2.0.1/jquery.pjax.min.js"></script>

	
<script src="/luffy/js/main.js"></script>

	
		
<script src="https://cdn.jsdelivr.net/npm/leancloud-storage/dist/av-min.js"></script>

		
<script src="https://cdn.jsdelivr.net/npm/valine@1.3.10/dist/Valine.min.js"></script>

	
	
<meta name="generator" content="Hexo 5.4.0"></head>

<body>
	<script>
var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?3efe99c287df5a1d6f0d02d187e403c1";
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();
</script>

<header id="header">
    <a id="title" target="_blank" rel="noopener" href="https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU4NzA3MTc5Mg==&action=getalbum&album_id=1657204970858872832&scene=126#wechat_redirect" class="logo">对线面试官</a>

	<ul id="menu">
		
	

	

		<li class="menu-item">
			<a href="https://gitee.com/zhongfucheng/Java3y" class="menu-item-link" target="_blank">
				【戳这里】获取更多原创干货💪💪
			</a>
		</li>
		<li class="menu-item">
			<a href="https://gitee.com/zhongfucheng/Java3y" class="menu-item-link" target="_blank">
				<i class="fa fa-github fa-2x"></i>
			</a>
		</li>
	</ul>
</header>

	
<div id="sidebar">
	<button id="sidebar-toggle" class="toggle" ><i class="fa fa-arrow-right " aria-hidden="true"></i></button>
	
	<div id="site-toc">
		<input id="search-input" class="search-input" type="search" placeholder="按回车全站搜索">
		<div id="tree">
			

			
							<ul>
								<li class="directory">
									<a href="#" class="directory">
										<i class="fa fa-plus-square-o"></i>
										00-面试前准备
									</a>
									
							<ul>
								<li class="file">
									<a href="/luffy/2021/10/30/00-%E9%9D%A2%E8%AF%95%E5%89%8D%E5%87%86%E5%A4%87/01.%E7%AE%80%E5%8E%86/">
										01.简历
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
								</li>
								
							</ul>
			
							<ul>
								<li class="directory">
									<a href="#" class="directory">
										<i class="fa fa-plus-square-o"></i>
										01-Java基础
									</a>
									
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/01-Java%E5%9F%BA%E7%A1%80/01.%20%E6%B3%A8%E8%A7%A3/">
										01. 注解
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/01-Java%E5%9F%BA%E7%A1%80/02.%20%E6%B3%9B%E5%9E%8B/">
										02. 泛型
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/01-Java%E5%9F%BA%E7%A1%80/03.%20JavaNIO/">
										03. JavaNIO
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/01-Java%E5%9F%BA%E7%A1%80/04.%20%E5%8F%8D%E5%B0%84%E5%92%8C%E5%8A%A8%E6%80%81%E4%BB%A3%E7%90%86/">
										04. 反射和动态代理
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
								</li>
								
							</ul>
			
							<ul>
								<li class="directory">
									<a href="#" class="directory">
										<i class="fa fa-plus-square-o"></i>
										02-Java并发
									</a>
									
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/02-Java%E5%B9%B6%E5%8F%91/01.%20%E5%A4%9A%E7%BA%BF%E7%A8%8B%E5%9F%BA%E7%A1%80/">
										01. 多线程基础
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/02-Java%E5%B9%B6%E5%8F%91/02.%20CAS/">
										02. CAS
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/02-Java%E5%B9%B6%E5%8F%91/03.%20synchronized/">
										03. synchronized
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/02-Java%E5%B9%B6%E5%8F%91/04.%20AQS%E5%92%8CReentrantLock/">
										04. AQS和ReentrantLock
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/02-Java%E5%B9%B6%E5%8F%91/05.%20%E7%BA%BF%E7%A8%8B%E6%B1%A0/">
										05. 线程池
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/02-Java%E5%B9%B6%E5%8F%91/06.%20ThreadLocal/">
										06. ThreadLocal
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/02-Java%E5%B9%B6%E5%8F%91/07.%20CountDownLatch%E5%92%8CCyclicBarrier/">
										07. CountDownLatch和CyclicBarrier
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/02-Java%E5%B9%B6%E5%8F%91/08.%20%E4%B8%BA%E4%BB%80%E4%B9%88%E9%9C%80%E8%A6%81Java%E5%86%85%E5%AD%98%E6%A8%A1%E5%9E%8B/">
										08. 为什么需要Java内存模型
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/02-Java%E5%B9%B6%E5%8F%91/09.%20%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BAJava%E5%86%85%E5%AD%98%E6%A8%A1%E5%9E%8B/">
										09. 深入浅出Java内存模型
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
								</li>
								
							</ul>
			
							<ul>
								<li class="directory">
									<a href="#" class="directory">
										<i class="fa fa-plus-square-o"></i>
										03-Java容器
									</a>
									
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/03-Java%E5%AE%B9%E5%99%A8/01.%20List%E9%9B%86%E5%90%88/">
										01. List集合
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/03-Java%E5%AE%B9%E5%99%A8/02.%20Map%E9%9B%86%E5%90%88/">
										02. Map集合
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
								</li>
								
							</ul>
			
							<ul>
								<li class="directory">
									<a href="#" class="directory">
										<i class="fa fa-plus-square-o"></i>
										04-Java虚拟机
									</a>
									
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/04-Java%E8%99%9A%E6%8B%9F%E6%9C%BA/01.%20Java%E7%BC%96%E8%AF%91%E5%88%B0%E6%89%A7%E8%A1%8C%E7%9A%84%E8%BF%87%E7%A8%8B/">
										01. Java编译到执行的过程
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/04-Java%E8%99%9A%E6%8B%9F%E6%9C%BA/02.%20%E5%8F%8C%E4%BA%B2%E5%A7%94%E6%B4%BE%E6%9C%BA%E5%88%B6/">
										02. 双亲委派机制
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/04-Java%E8%99%9A%E6%8B%9F%E6%9C%BA/03.%20JVM%E5%86%85%E5%AD%98%E7%BB%93%E6%9E%84/">
										03. JVM内存结构
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/04-Java%E8%99%9A%E6%8B%9F%E6%9C%BA/04.%20%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6%E6%9C%BA%E5%88%B6/">
										04. 垃圾回收机制
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/20/04-Java%E8%99%9A%E6%8B%9F%E6%9C%BA/05.%20CMS%E5%9E%83%E5%9C%BE%E6%94%B6%E9%9B%86%E5%99%A8/">
										05. CMS垃圾收集器
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/20/04-Java%E8%99%9A%E6%8B%9F%E6%9C%BA/06.%20G1%E5%9E%83%E5%9C%BE%E6%94%B6%E9%9B%86%E5%99%A8/">
										06. G1垃圾收集器
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/24/04-Java%E8%99%9A%E6%8B%9F%E6%9C%BA/07.%20JVM%E8%B0%83%E4%BC%98/">
										07. JVM调优
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
								</li>
								
							</ul>
			
							<ul>
								<li class="directory">
									<a href="#" class="directory">
										<i class="fa fa-plus-square-o"></i>
										05-Spring
									</a>
									
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/05-Spring/01.%20SpringMVC/">
										01. SpringMVC
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/05-Spring/02.%20Spring%E5%9F%BA%E7%A1%80/">
										02. Spring基础
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/05-Spring/03.%20SpringBean%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F/">
										03. SpringBean生命周期
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
								</li>
								
							</ul>
			
							<ul>
								<li class="directory">
									<a href="#" class="directory">
										<i class="fa fa-plus-square-o"></i>
										06-Redis
									</a>
									
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/06-Redis/01.%20Redis%E5%9F%BA%E7%A1%80/">
										01. Redis基础
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/06-Redis/02.%20Redis%E6%8C%81%E4%B9%85%E5%8C%96/">
										02. Redis持久化
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/20/06-Redis/03.%20Redis%E4%B8%BB%E4%BB%8E%E6%9E%B6%E6%9E%84/">
										03. Redis主从架构
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/20/06-Redis/04.%20Redis%E5%88%86%E7%89%87%E9%9B%86%E7%BE%A4/">
										04. Redis分片集群
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
								</li>
								
							</ul>
			
							<ul>
								<li class="directory">
									<a href="#" class="directory">
										<i class="fa fa-plus-square-o"></i>
										07-消息队列
									</a>
									
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/07-%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97/01.%20Kafka%E5%9F%BA%E7%A1%80/">
										01. Kafka基础
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/07-%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97/02.%20%E4%BD%BF%E7%94%A8Kafka%E4%BC%9A%E8%80%83%E8%99%91%E4%BB%80%E4%B9%88%E9%97%AE%E9%A2%98/">
										02. 使用Kafka会考虑什么问题
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
								</li>
								
							</ul>
			
							<ul>
								<li class="directory">
									<a href="#" class="directory">
										<i class="fa fa-plus-square-o"></i>
										08-MySQL
									</a>
									
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/08-MySQL/01.%20MySQL%E7%B4%A2%E5%BC%95/">
										01. MySQL索引
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/08-MySQL/02.%20MySQL%E4%BA%8B%E5%8A%A1%E5%92%8C%E9%94%81%E6%9C%BA%E5%88%B6%E5%92%8CMVCC/">
										02. MySQL事务和锁机制和MVCC
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/19/08-MySQL/03.%20MySQL%E8%B0%83%E4%BC%98/">
										03. MySQL调优
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
								</li>
								
							</ul>
			
							<ul>
								<li class="directory">
									<a href="#" class="directory">
										<i class="fa fa-plus-square-o"></i>
										09-项目场景类
									</a>
									
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/20/09-%E9%A1%B9%E7%9B%AE%E5%9C%BA%E6%99%AF%E7%B1%BB/01.%20%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E5%8E%BB%E9%87%8D%E5%92%8C%E5%B9%82%E7%AD%89/">
										01. 如何实现去重和幂等
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/20/09-%E9%A1%B9%E7%9B%AE%E5%9C%BA%E6%99%AF%E7%B1%BB/02.%20%E7%B3%BB%E7%BB%9F%E9%9C%80%E6%B1%82%E5%A4%9A%E5%8F%98%E5%A6%82%E4%BD%95%E8%AE%BE%E8%AE%A1/">
										02. 系统需求多变如何设计
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/20/09-%E9%A1%B9%E7%9B%AE%E5%9C%BA%E6%99%AF%E7%B1%BB/03.%20%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/">
										03. 设计模式
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
								</li>
								
							</ul>
			
							<ul>
								<li class="directory">
									<a href="#" class="directory">
										<i class="fa fa-plus-square-o"></i>
										10-计算机网络
									</a>
									
							<ul>
								<li class="file">
									<a href="/luffy/2021/08/25/10-%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/01.%20HTTP/">
										01. HTTP
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/10/13/10-%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/02.TCP%E4%B8%89%E6%AC%A1%E6%8F%A1%E6%89%8B%E5%92%8C%E5%9B%9B%E6%AC%A1%E6%8C%A5%E6%89%8B/">
										02.TCP三次握手和四次挥手
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
								</li>
								
							</ul>
			
							<ul>
								<li class="directory">
									<a href="#" class="directory">
										<i class="fa fa-plus-square-o"></i>
										11-算法
									</a>
									
							<ul>
								<li class="file">
									<a href="/luffy/2021/09/01/11-%E7%AE%97%E6%B3%95/01.%20%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95/">
										01. 排序算法
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/09/02/11-%E7%AE%97%E6%B3%95/02.%20LeetCode%20Easy/">
										02. LeetCode Easy
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/09/02/11-%E7%AE%97%E6%B3%95/02.%20LeetCode%20Medium/">
										02. LeetCode Medium
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
								</li>
								
							</ul>
			
							<ul>
								<li class="directory">
									<a href="#" class="directory">
										<i class="fa fa-plus-square-o"></i>
										12-austin项目
									</a>
									
							<ul>
								<li class="file">
									<a href="/luffy/2021/11/01/12-austin%E9%A1%B9%E7%9B%AE/00.%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D/">
										00.项目介绍
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file active">
									<a href="/luffy/2021/10/30/12-austin%E9%A1%B9%E7%9B%AE/01.%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/">
										01.环境搭建
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/10/30/12-austin%E9%A1%B9%E7%9B%AE/02.%E6%97%A5%E5%BF%97/">
										02.日志
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/11/24/12-austin%E9%A1%B9%E7%9B%AE/03.%E5%B7%A5%E5%85%B7%E5%8C%85/">
										03.工具包
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/11/24/12-austin%E9%A1%B9%E7%9B%AE/04.%E4%BB%8E%E4%B8%80%E6%9D%A1%E7%9F%AD%E4%BF%A1%E5%BC%80%E5%A7%8B/">
										04.从一条短信开始
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/11/24/12-austin%E9%A1%B9%E7%9B%AE/05.%E9%80%89%E6%8B%A9%E6%95%B0%E6%8D%AE%E5%BA%93%E5%92%8C%E6%8A%80%E6%9C%AF%E9%80%89%E5%9E%8B/">
										05.选择数据库和技术选型
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/11/24/12-austin%E9%A1%B9%E7%9B%AE/06.MySQL%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/">
										06.MySQL环境搭建
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
							<ul>
								<li class="file">
									<a href="/luffy/2021/11/24/12-austin%E9%A1%B9%E7%9B%AE/07.Kafka%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/">
										07.Kafka环境搭建
									</a>
								</li>
								<div class="article-toc" style="display: none;"></div>
							</ul>
			
								</li>
								
							</ul>
			
		</div>
	</div>
</div>

	<!-- 引入正文 -->
	<div id="content">
		<h1 id="article-title">

	01.环境搭建
</h1>
<div class="article-meta">
	
	<span>3y</span>
	<span>2021-10-30 16:23:01</span>
		<div id="article-categories">
    
		<span>Categories：</span>
            
    

    
		<span>Tags：</span>
            
    
		</div>

</div>

<div id="article-content">
	<p>前两天我说要写个项目来持续迭代，有好多小伙伴都表示支持和鼓励，项目的第一篇这不就来了么~</p>
<p>我给项目取了个名字，英文名叫做：austin，中文名叫做：奥斯丁。</p>
<p>名字倒没有什么特别的含义，我单纯觉得这个名字好看，说白了就是我喜欢。在起项目名的时候，可以不要取得那么规矩。取系统名字可以按自己想法来搞就行了，人家只要用了你的系统，就自然「入乡随俗」了。</p>
<p>不聊别的了，进入今天的主题吧。从零开始一个项目，也得搭建技术环境的，所以今天先来聊聊搭建技术环境的内容吧</p>
<p>本文主题大纲：Maven和SpringBoot以及Git</p>
<p><img src="https://tva1.sinaimg.cn/large/008i3skNgy1gvxezrv450j30xk074aaa.jpg"></p>
<h2 id="01、什么是MAVEN？为什么要用MAVEN？"><a href="#01、什么是MAVEN？为什么要用MAVEN？" class="headerlink" title="01、什么是MAVEN？为什么要用MAVEN？"></a>01、什么是MAVEN？为什么要用MAVEN？</h2><p>Maven是一个「<strong>项目管理</strong>」的工具。</p>
<p>我记得以前我在大学的时候，还没用到Maven，每次学习最头疼的就是各种的依赖jar包。当我学习到Maven的时候，这个工具给我的第一感觉就是：这东西就是一个「<strong>依赖包管理</strong>」的工具</p>
<p>初体验之后，直呼太TM香了！再也不用到处去找jar包了！</p>
<p>其实，Maven不仅仅承担着「依赖包管理」功能，同时他在日常开发使用中也承担着「编译」、「测试」、「打包」、「部署」等等功能。我在<strong>日常开发</strong>中常用到的maven命令：</p>
<pre><code>1、mvn compile 
2、mvn test 
3、mvn clean 
4、mvn pakage 
5、mvn install 
6、mvn deploy  
7、mvn versions:set -DnewVersion=xxxx  设置Maven的版本  
8、mvn dependency:tree  查看maven的依赖树（排查依赖很有效）

常用参数
-Dmaven.test.skip=true
-Dmaven.javadoc.skip=true
</code></pre>
<p>现在Java后端项目很多都是用Maven来作为「项目管理」的工具，至少我接触的都是。</p>
<p>有的人就好奇了：近几年不是有个后起之秀<strong>Gradle</strong>吗？说实话，我是没用过，不过我也去简单了解了一番。</p>
<p>据我了解到的，总的来说，Gradle比Maven更灵活和简洁，目前多用在Android项目上。还有很重要的一点，相对Maven而言，<strong>Gradle学习成本更大</strong>。</p>
<p>现在Java后端的项目也越来越轻量，很多时候也不需要那么地”灵活“（Maven提供的功能基本够用）。对于简洁来说，XML也不是不能看（毕竟现在大家都在IDE上开发嘛）。所以，这次我构建的项目也直接用的Maven</p>
<p>不过啊，因为我是没深度使用过Gradle，所以也不能说我用Maven比Gradle一定要合适。但至少，在现在，我认为Maven还能战10年</p>
<p><img src="https://tva1.sinaimg.cn/large/008i3skNgy1gvxf2leh4yj30zm064t97.jpg"></p>
<h2 id="02、为什么SPRINGBOOT"><a href="#02、为什么SPRINGBOOT" class="headerlink" title="02、为什么SPRINGBOOT"></a>02、为什么SPRINGBOOT</h2><p>这次我选用SpringBoot作为项目的基础环境，至于为什么SpringBoot，我先跟大家分享下群里的对话：</p>
<ul>
<li><p>我记得有一天，有个小伙伴在群里问：”<strong>今天我去面试了，面试官问我使用SpringBoot有什么好处</strong>“。</p>
</li>
<li><p>接着，另一个小伙伴回答：”<strong>使用SpringBoot最大的好处，就是让我这种水平的开发都入了行，做上了程序员</strong>“。</p>
</li>
</ul>
<p>我在大学时是学过SSH和SSM的，我学这些的时候还没用Maven，那时候搭建环境就尤其麻烦了。（当时还专门写了博客记录自己是如何整合SSH和SSM的）</p>
<p>一个项目里会用好几种技术栈，不同的技术栈就需要有对应的配置（常见的Spring、SpringMVC、Mybatis）等等，然后这些技术都需要兼容对应的版本（一般我们是把这些技术整合到Spring上的）。当我们要引入新的框架，那自然就需要对齐Spring版本并且有对应的配置文件。</p>
<p>那时候真的是<strong>配置地狱</strong>（框架们都做得灵活，都支持我们把可能需要改动的内容写到XML配置上，但随着时间流逝，我们渐渐发现：这些XML配置我们都维护不动了…)</p>
<p>基于这种背景下，SpringBoot应运而生，它最明显的就是简化了我们开发的配置工作。当一项技术能减少开发时工作量都有一个特点：<strong>约定大于配置</strong>（开箱即用）</p>
<p><img src="https://tva1.sinaimg.cn/large/008i3skNgy1gvxf3315iwj316e072dg8.jpg"></p>
<p>只要引入了SpringBoot，那只要通过几行的代码就能快速地从零写出对应的HTTP接口（可参考官网SpringBoot 的Quick Start）。以前我们干这种事，需要整合SpringMVC，需要配置一个Tomcat服务器，需要对齐它们的版本（是否兼容）….</p>
<p>我认为SpringBoot作为使用方，要了解以下两块内容：</p>
<p><strong>一、</strong>当我们项目我们引入了SpringBoot的依赖(<code>spring-boot-starter-parent</code>)，点进去<code>parent</code>就会发现<code>spring-boot-dependencies</code>这个pom定义了非常多「<strong>默认的依赖</strong>」。这使得我们在项目中使用的时候，都不用写版本了（因为SpringBoot已经默认帮我们已经写上了），还不用担心版本冲突的问题。</p>
<p><strong>二、</strong>在启动SpringBoot项目的时候，还会帮我们初始化很多默认的配置。（这里也是一个面试经常考察的地方「<strong>自动配置</strong>」）。总的来说，<code>@SpringBootApplication</code>等同于下面三个注解：</p>
<ul>
<li><code>@SpringBootConfiguration</code></li>
<li><code>@EnableAutoConfiguration</code></li>
<li><code>@ComponentScan</code></li>
</ul>
<p>其中<code>@EnableAutoConfiguration</code>是关键(启用自动配置)，内部实际上就去加载<code>META-INF/spring.factories</code>文件的信息，然后筛选出以<code>EnableAutoConfiguration</code>为key的数据，加载到IOC容器中，实现自动配置功能！</p>
<p><img src="https://tva1.sinaimg.cn/large/008i3skNgy1gvxf3zzimbj319g06wq3f.jpg"></p>
<p>现在新写的Java后端项目，基本都是用SpringBoot作为开发环境了，毕竟是真的爽！</p>
<h2 id="03、为什么项目结构是多模块？"><a href="#03、为什么项目结构是多模块？" class="headerlink" title="03、为什么项目结构是多模块？"></a>03、为什么项目结构是多模块？</h2><p>我搭建了项目，取了个名字叫：austin，然后我在IDE上新建了几个Maven Module，目前分别是（后面可能还会新增）：</p>
<ul>
<li>common(基本信息-&gt;POJO/枚举配置)</li>
<li>support(Data获取-&gt;DB/Redis/Elasticsearch)</li>
<li>service-api（服务接口)</li>
<li>service-api-imp（服务接口实现)</li>
<li>web（HTTP接口)</li>
</ul>
<p><img src="https://tva1.sinaimg.cn/large/008i3skNgy1gvu6vo8fgoj30o80dkmxs.jpg" alt="img"></p>
<p>最开始我们初学写代码的时候，可没那么讲究，直接在一个包下一把梭就完事了。</p>
<p>后来，他们说要分包，不同模块的代码写到不同的包上。于是我们会在项目下新建对应包（其实就是文件夹），比如说dao/service/controller</p>
<p>而到现在，基本都是分模块了，不同职责的代码被分到对应的模块上。而<code>austin</code>直属下的<code>pom</code>文件就一般只用来管理依赖（把依赖和版本信息定义在父pom上，具体哪个子模块需要引入就好了）</p>
<pre><code class="xml">&lt;dependencyManagement&gt;
  &lt;dependencies&gt;
    &lt;!--mysql驱动包--&gt;
    &lt;dependency&gt;
      &lt;groupId&gt;mysql&lt;/groupId&gt;
      &lt;artifactId&gt;mysql-connector-java&lt;/artifactId&gt;
      &lt;version&gt;5.1.35&lt;/version&gt;
    &lt;/dependency&gt;
  &lt;/dependencies&gt;
&lt;/dependencyManagement&gt;
</code></pre>
<p><img src="https://tva1.sinaimg.cn/large/008i3skNgy1gvxf4np6afj30xi050mxb.jpg"></p>
<p>那么这种分模块又比以前分包好在哪里呢？假设我们是分包的，那相当于所有的代码写到一个模块上。每次当我们修改时，我们需要重新编译整个模块（可能我只改了Dao包的某个实现类，但在编译的时候会把整个模块都编译一遍）。</p>
<p>如果是分模块的话，我们直接到模块下 <code>mvn compile -Dmaven.test.skip=true</code> 就完事了。不过这只是一个方面，说服力好像也不太足。我认为最主要的是，我们分模块了以后可以<strong>复用</strong></p>
<p>比如，现在我有<code>austin</code>这个项目，此时为了对数据进行处理，我需要去新建对应的<code>Flink</code>应用。可能受限于环境下，不会把flink相关的代码写在<code>austin</code>项目下。（这也只是举了个例子，我想表达的是：一个成熟的项目往往不只有一个Git地址就覆盖了整个功能。在绝大多数时候，不同的功能都会分开到不同的项目上）。</p>
<p>那不同的项目下，很有可能需要做的事情是有重复的（比如我都需要去读数据库获取数据）。那这时候，分模块的好处就体现出来了：可以直接引入对应的jar包(比如support包和common包)。那就不用在两个不同的项目上，写一模一样的代码了，能够共用一套代码。</p>
<p><img src="https://tva1.sinaimg.cn/large/008i3skNgy1gvxf55f9zcj30me05u74b.jpg"></p>
<p>有没有小伙伴好奇为什么<code>api</code>和<code>api-impl</code>是分了两个模块的吗？这里是为了：如果以后引入了RPC调用，那我们只需要提供<code>api</code>模块出去就好了，<code>api</code>模块的依赖一般很少。（解决版本冲突是一件脏累活，人家嵌入你的SDK只是想用你的服务去获取对应信息，你别给人家整了一大堆毫无作用的依赖出来）</p>
<h2 id="04、为什么GIT"><a href="#04、为什么GIT" class="headerlink" title="04、为什么GIT"></a>04、为什么GIT</h2><p>Git是一个版本控制工具。把<code>austin</code>被Git管理后，我每次提交的内容都会被看到，这在多人协作中尤其重要！</p>
<p>除此之外，有了“版本”的概念以后，用Git可以随意回退版本（有后悔药吃</p>
<p>在公司接触都是Git了（现在开发基本离不开Git了，这玩意本身还是比较好学的，用起来还是挺爽的），顺便发一波我日常用到的Git命令吧：</p>
<pre><code>1. git clone  (克隆代码)
2. git checkout -b （新建分支）
3. git checkout (切换分支)
4. git add / git commit /git push （这几步我基本都是在IDE上用快捷键完成，很少自己敲命令）
5. git fetch (获取最新的修改信息)
6. git merge (合并代码)  
7. git stash /git pop (有的时候临时会用，把代码放到暂存区中)  
8. git reset --hard  (代码写烂了，直接回退吧)
</code></pre>
<p>一般Git我是一半用命令行，一半用IDE集成的工具。总的来说，怎么舒服怎么来（没有限定说一定要用命令行，我是自己怎么操作比较快就怎么搞）</p>
<p><img src="https://tva1.sinaimg.cn/large/008i3skNgy1gvxf6gxb6wj310805yt90.jpg"></p>
<h2 id="05、总结"><a href="#05、总结" class="headerlink" title="05、总结"></a>05、总结</h2><p>说实话，如果还没工作的人，我建议多学学Maven和Git的基本使用（这样一来，去到公司就不用一脸懵逼了）</p>
<p>对于SpringBoot的学习是永无止境的，我个人的理解是，在了解了用法以后，可以尝试面向「面试题」进行学习（毕竟面试题面的内容大多数都是比较核心的，至少不是偏门没有任何用途的）</p>
<p>austin项目构建：</p>
<ul>
<li>Maven：依赖包管径+项目管理（多模块）</li>
<li>SpringBoot：基础技术环境搭建（开箱即用）</li>
<li>Git：版本控制工具（代码上传至远程Gitee）</li>
</ul>
<p>今天就到这里吧。我花了一个晚上搭建了架子，两个晚上写了这篇文章。自从有了这个迭代项目的想法以后，晚上的效率嘎嘎地就上去了。</p>
<p>这篇主要是分享了我个人的一些经验或者想法吧，或许你有不同的看法跟我交流和沟通，欢迎添加我的微信进入交流群一起耍（：谁没有个带薪如厕的时刻，我就喜欢在那时刻，在群里吹牛逼🐂</p>
<p>基础不扎实的小伙伴都在找git,maven,SpringBoot的资料了，贴心的我已经整理好了（<strong>我值得你的三连</strong>）。需要跟上我的速度，不然只能落后了：</p>
<ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s?__biz=MzI4Njg5MDA5NA==&mid=2247483878&idx=2&sn=611da7804c1738453005c6a4e0f94561&chksm=ebd740e7dca0c9f1a3bbc086493d53b04c9953e4c81f9337a158f217c6f2f02fcbcff327a7ed&scene=21###wechat_redirect">Maven基础</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s?__biz=MzI4Njg5MDA5NA==&mid=2247487419&idx=1&sn=c107911e52874e574a5aef874b046b1a&chksm=ebd74ebadca0c7ac7164191639b036fc132a1cf02c8d74460876086542b571fc794aad28344e&token=1857725064&lang=zh_CN#rd">Maven实战</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s?__biz=MzI4Njg5MDA5NA==&mid=2247489082&idx=1&sn=dbdd2e6f59c4fac19fbbbb1870d2ca93&chksm=ebd7573bdca0de2d0d5556d2c652df5de7e66dbb137c878c026efbad319cc5cafdc3b8700aa5&token=1936697047&lang=zh_CN#rd">什么是Git</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s?__biz=MzI4Njg5MDA5NA==&mid=2247490028&idx=1&sn=ce7dab3f5a08d54425e6fd54bafc5efc&chksm=ebd758eddca0d1fbc256f4cbfe90ee85a9e014c5d4e4e90af535907cbb25040df526c227be03&token=1936697047&lang=zh_CN#rd">Git实战</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s?__biz=MzI4Njg5MDA5NA==&mid=2247484637&idx=1&sn=956c14daacc3e09367d9c27458b09f7f&chksm=ebd745dcdca0ccca6c173d32b6f8299f61d950990ee7c6eb2ec676f5ce0ad9b0ba306306a952###rd">SpringBoot配置原理</a></li>
</ul>
<p><img src="https://tva1.sinaimg.cn/large/008i3skNgy1gvxfh6cn4aj30u0140gr5.jpg"></p>
<p>Gitee链接：<a target="_blank" rel="noopener" href="https://gitee.com/zhongfucheng/austin">https://gitee.com/zhongfucheng/austin</a></p>
<p>GitHub链接：<a target="_blank" rel="noopener" href="https://github.com/ZhongFuCheng3y/austin">https://github.com/ZhongFuCheng3y/austin</a></p>

</div>


    <div class="post-guide">
        <div class="item left">
            
              <a href="/luffy/2021/10/30/12-austin%E9%A1%B9%E7%9B%AE/02.%E6%97%A5%E5%BF%97/">
                  <i class="fa fa-angle-left" aria-hidden="true"></i>
                  02.日志
              </a>
            
        </div>
        <div class="item right">
            
              <a href="/luffy/2021/10/30/00-%E9%9D%A2%E8%AF%95%E5%89%8D%E5%87%86%E5%A4%87/01.%E7%AE%80%E5%8E%86/">
                01.简历
                <i class="fa fa-angle-right" aria-hidden="true"></i>
              </a>
            
        </div>
    </div>




<script>
	
	
</script>
	</div>
	<button id="totop-toggle" class="toggle"><i class="fa fa-angle-double-up" aria-hidden="true"></i></button>
</body>
</html>
